package com.fc.design.abstractFactory;

/**
 * <p> Author：lidongxu </p>
 * <p> Title：</p>
 * <p> Description：</p>
 * <p> Create Time：2020-03-30 13:40 </p>
 */
public class TestAbstractFactory {
    public static void main(String[] args) {
        Product1 p1;
        Product2 p2;
        AbstractFactory af;
        af = new ConcreteFactory1();
        p1 = af.newProduct1();
        p1.show();

        p2 = af.newProduct2();
        p2.show();
    }
}

//抽象产品：提供了产品的接口
interface Product1 {
    public void show();
}

//抽象产品：提供了产品的接口
interface Product2 {
    public void show();
}

//具体产品1：实现抽象产品中的抽象方法
class ConcreteProduct11 implements Product1 {
    public void show() {
        System.out.println("具体产品1显示...");
    }
}

//具体产品2：实现抽象产品中的抽象方法
class ConcreteProduct21 implements Product2 {
    public void show() {
        System.out.println("具体产品2显示...");
    }
}

interface AbstractFactory {
    public Product1 newProduct1();

    public Product2 newProduct2();
}

class ConcreteFactory1 implements AbstractFactory {
    public Product1 newProduct1() {
        System.out.println("具体工厂 1 生成-->具体产品 11...");
        return new ConcreteProduct11();
    }

    public Product2 newProduct2() {
        System.out.println("具体工厂 1 生成-->具体产品 21...");
        return new ConcreteProduct21();
    }
}